﻿

//<div id="dynamicDetalleSemanas" class="editionContainerFilter">
//          <table id="dynamicDetalleSemanasTable" class='cPlanProdTable detalleSemanasTable' cellpadding="0" cellspacing="0">            
//              <tr class='cPlanProdTableHeader'> 
//                <td class='cPlanProdInvisible'>Id (hidden)</td> 
//                <td>N&uacute;mero de Semana</td>
//                <td>Desde</td>
//                <td>Hasta</td>
//                <td>Año</td>
//                <td>Mes</td>
//                <td>Orden de la semana</td>
//                <td>Comando Completar</td>
//              </tr>       
//              <tr>  <%--"cPlanProdRowPar" : "cPlanProdRowImpar"--%>
//                <td class='cPlanProdInvisible'><input type="hidden" id="detid_1" name="" /></td>
//                <td><input type="text" id="nrosemana_1" name="nrosemana_1" class="nrosemana" /></td>
//                <td><input type="text" id="desde_1" name="desde_1" class="detalleSemanaFecha" /></td>
//                <td><input type="text" id="hasta_1" name="hasta_1" class="detalleSemanaFecha" /></td>
//                <td><input type="text" id="anio_1" name="anio_1" class="anio" /></td>
//                <td><input type="text" id="mes_1" name="mes_1" class="mes"/></td>
//                <td><input type="text" id="orden_1" name="orden_1" class="orden" /></td>
//                <td><a class="guardar cmdAutocompletar">Autocompletar a partir de aqui</a></td>
//              </tr>                  
//          </table>  
//          <a class="guardar lnkAgregarNuevaFila">Agregar una nueva fila</a>      
//            <div class="clear">
//        </div>
//   public int Id { get; set; }

//        [DataMember]
//        public DateTime Desde { get; set; }

//        [DataMember]
//        public DateTime Hasta { get; set; }

//        [DataMember]
//        public int NumeroSemana { get; set; }

//        [DataMember]
//        public int OrdenSemana { get; set; }
//        
//        [DataMember]
//        public int Mes { get; set; }

//        [DataMember]
//        public int Anio { get; set; }



function TemporadaDetalleCtrl(ctrlId, nroSemanasId, arrayObj) {

    var _I = this;

    _I.divCtrl = $('#' + ctrlId);
    _I.tableCtrl = _I.divCtrl.find('table.detalleSemanasTable');
    _I.cmdAgregarFila = _I.divCtrl.find('a.lnkAgregarNuevaFila');
    _I.nroSemanasId = nroSemanasId;
    _I.arrayObj = arrayObj;

    this.initialize = function () {

        // Cargo los editores de fecha
        $('.detalleSemanaFecha').datepick({ dateFormat: 'dd/mm/yyyy' });

        // Inicializo el comando para agregar una nueva fila
        _I.cmdAgregarFila.click(function () {
            _I.agregarNuevaFila();
            return false;
        });

        // Cargo las semanas existentes que se cargaron desde el server
        _I.loadSemanasExistentes();
    };

    this.loadSemanasExistentes = function () {

        if (_I.arrayObj) {
            for (i in _I.arrayObj) {
                var detalle = _I.arrayObj[i];
                if (detalle) {

                    var detalleId = detalle.Id;
                    // Sino existe la fila, creo la fila y cargo los valores
                    var inputHidId = _I.tableCtrl.find('input[id=detid_' + i + ']');
                    if (inputHidId.length == 0) {
                        _I.agregarNuevaFila();
                    }

                    // Si existe la fila (o la creé), cargo los valores
                    _I._cargarValoresEnFila(i, detalle);

                }
            }
        }
    };

    this.agregarNuevaFila = function () {

        // obtengo el último registro
        var filas = _I.tableCtrl.find('tr').length;
        var lastTr = _I.tableCtrl.find('tr').last();
        var columnas = lastTr[0].cells.length;

        filas = filas - 1;

        if (lastTr.attr('class') == 'cPlanProdRowPar') {
            rowStyleClass = 'cPlanProdRowImpar';
        }
        else {
            rowStyleClass = 'cPlanProdRowPar';
        }

        // Agrego la fila en el ultimo tr
        var rowHtml = "<tr class='" + rowStyleClass + "' id='tr_row_" + filas + "' >";

        // <td class='cPlanProdInvisible'><input type="hidden" id="detid_1" name="" /></td>
        rowHtml += '<td class="cPlanProdInvisible"><input type="hidden" id="detid_' + filas + '"  name="detid_' + filas + '" /></td>';
        rowHtml += '<td><input type="text" id="nrosemana_' + filas + '" name="nrosemana_' + filas + '" class="nrosemana" /></td>';
        rowHtml += '<td><input type="text" id="desde_' + filas + '" name="desde_' + filas + '" class="detalleSemanaFecha" /></td>';
        rowHtml += '<td><input type="text" id="hasta_' + filas + '" name="hasta_' + filas + '" class="detalleSemanaFecha" /></td>';
        rowHtml += '<td><input type="text" id="anio_' + filas + '" name="anio_' + filas + '"  /></td>';
        rowHtml += '<td><input type="text" id="mes_' + filas + '" name="mes_' + filas + '"  /></td>';
        rowHtml += '<td><input type="text" id="orden_' + filas + '" name="orden_' + filas + '"  /></td>';
        rowHtml += '<td><a class="guardar cmdAutocompletar" fila="' + filas + '">Autocompletar a partir de aqui</a></td>';

        rowHtml += "</tr>";
        lastTr.after(rowHtml);

        // Cargar los datetimepickers
        $('#desde_' + filas).datepick({ dateFormat: 'dd/mm/yyyy' });
        $('#hasta_' + filas).datepick({ dateFormat: 'dd/mm/yyyy' });

        // Cargar los eventos
        _I.divCtrl.find('a[fila="' + filas + '"]').click(function () {
            _I._cmdCompletarDesdeAquiClickHandler($(this));
            return false;
        });
    };

    this._cargarValoresEnFila = function (i, detalle) {

        if (detalle) {
            _I.tableCtrl.find("#detid_" + i).val(detalle.Id);
            _I.tableCtrl.find("#nrosemana_" + i).val(detalle.NumeroSemana);
            _I.tableCtrl.find("#desde_" + i).val(_I._formatDate(detalle.Desde));
            _I.tableCtrl.find("#hasta_" + i).val(_I._formatDate(detalle.Hasta));
            _I.tableCtrl.find("#anio_" + i).val(detalle.Anio);
            _I.tableCtrl.find("#mes_" + i).val(detalle.Mes);
            _I.tableCtrl.find("#orden_" + i).val(detalle.OrdenSemana);
        }
    };

    this._cmdCompletarDesdeAquiClickHandler = function (lnkFila) {

        // Si tengo que autocompletar, tomo la fecha actual y empiezo a sumar 7 dias y 1 en los demas
        // Busco el "objeto" de la fila actual
        var i = lnkFila.attr('fila');

        var topeSemanas = parseInt($('#' + _I.nroSemanasId).val());

        var nroSemana = parseInt(_I.tableCtrl.find("#nrosemana_" + i).val());

        var desdeStr = _I.tableCtrl.find("#desde_" + i).val();
        var fechaDesde = null;
        if (desdeStr) {
            var fechaDesdeSplit = desdeStr.split('/');
            fechaDesde = new Date(fechaDesdeSplit[2], fechaDesdeSplit[1] - 1, fechaDesdeSplit[0]);
        }

        var hastaStr = _I.tableCtrl.find("#hasta_" + i).val();
        var fechaHasta = null;
        if (hastaStr) {
            fechaHasta = _I.getDateObjFromStr(hastaStr);
        }

        var anio = parseInt(_I.tableCtrl.find("#anio_" + i).val());
        var mes = parseInt(_I.tableCtrl.find("#mes_" + i).val());
        var orden = parseInt(_I.tableCtrl.find("#orden_" + i).val());


        // Tengo que agregar en el siguiente
        var obj = {};
        i++;

        // elimino las filas de mas
        //        var trToRemove = _I.tableCtrl.find('#tr_row_' + i);
        //        while (trToRemove.length != 0) {
        //            trToRemove.remove();
        //            trToRemove = _I.tableCtrl.find('#tr_row_' + i);
        //        }

        while (i < topeSemanas) {

            obj = {};
            obj.Id = 0;
            if (fechaHasta != null) {
                obj.Desde = new Date(fechaHasta.valueOf());
                fechaHasta = new Date(fechaHasta.setDate(fechaHasta.getDate() + 7).valueOf());
                obj.Hasta = new Date(fechaHasta.valueOf()); // ver si asigna así
            }

            nroSemana++;
            obj.NumeroSemana = nroSemana;
            orden++;
            obj.OrdenSemana = orden;

            var daysInMonth = _I.daysInMonth(obj.Desde.getFullYear(), obj.Desde.getMonth() + 1);
            var primeraSemana = (daysInMonth - obj.Desde.getDate() + 1) > 3;

            obj.Anio = obj.Desde.getFullYear();
            obj.Mes = obj.Desde.getMonth() + (primeraSemana ? 1 : 2); // paso al mes siguiente

            var inputHidId = _I.tableCtrl.find('input[id=detid_' + i + ']');
            if (inputHidId.length == 0) {
                _I.agregarNuevaFila();
            }
            else {
                obj.Id = inputHidId.val();
            }

            // Si existe la fila (o la creé), cargo los valores
            _I._cargarValoresEnFila(i, obj);

            i++;
        }

        // Elimino los registros mayores al tope
        //var lastTr = _I.tableCtrl.find('tr').last(); topeSemanas
        var trToRemove = _I.tableCtrl.find('#tr_row_' + i);
        while (trToRemove.length != 0) {
            trToRemove.remove();
            i++;
            trToRemove = _I.tableCtrl.find('#tr_row_' + i);
        }
    };

    this._formatDate = function (dateObj) {
        var dia = '' + dateObj.getDate();
        if (dia.length == 1)
            dia = '0' + dia;

        var mes = '' + (dateObj.getMonth() + 1);
        if (mes.length == 1)
            mes = '0' + mes;

        return '' + dia + '/' + mes + '/' + dateObj.getFullYear();
    };

    this.getDateObjFromStr = function (fecha) {
        var fechaHastaStr = fecha.split('/');
        return new Date(fechaHastaStr[2], fechaHastaStr[1] - 1, fechaHastaStr[0]);
    };

    this.calcularCantidadDeSemanas = function (desdeStr, hastaStr) {

        var semanas = 0;
        var current = _I.getDateObjFromStr(desdeStr);
        var hasta = _I.getDateObjFromStr(hastaStr);

        while (current <= hasta) {
            semanas++;
            current = new Date(current.setDate(current.getDate() + 7).valueOf());
        }

        return semanas;
    };

    /* Find the number of days in a given month.
    @param  year   (Date) the date to get days for or
    (number) the full year
    @param  month  (number) the month (1 to 12)
    @return  (number) the number of days in this month */
    this.daysInMonth = function (year, month) {
        month = (year.getFullYear ? year.getMonth() + 1 : month);
        year = (year.getFullYear ? year.getFullYear() : year);
        return new Date(year, month, 0).getDate();
    }

    if (arrayObj) {
        // Inicializo el ctrl
        this.initialize();
    }
}



